/*************************************************************************
    > File Name    : Dictionary.h
    > Author       : LiuLei
    > Mail         : 2261459486@qq.com 
    > Created Time : 2022年11月30日 星期三 09时14分59秒
 ************************************************************************/

#ifndef __LL_DICTIONARY_H__
#define __LL_DICTIONARY_H__

// 单例类 + 自动释放

#include "Configuration.h"
#include <vector>
#include <string>
#include <map>
#include <set>
using std::vector;
using std::pair;
using std::string;
using std::map;
using std::set;

class Dictionary
{
public:
    class AutoRelease
    {
    public:
        AutoRelease();
        ~AutoRelease();
    };

    static Dictionary *createInstance();
    void init();                                        // 通过配置文件路径初始化词典和索引
    vector<pair<string, int>> &getDictionary();         // 获取词典
    map<string, set<int>> &getIndexTable();             // 获取索引库

    Dictionary(const Dictionary &rhs) = delete;
    Dictionary &operator=(const Dictionary &rhs) = delete;

private:
    Dictionary();
    ~Dictionary();

private:
    static Dictionary                   *_pInstance;
    static AutoRelease                  _ar;

    vector<pair<string, int>>           _dict;          // 词典
    map<string, set<int>>               _indexTable;    // 索引表

    //词典库和索引库文件路径
    const string dict_cn = getPath("dict-cn");
    const string dict_en = getPath("dict-en");
    const string index_cn = getPath("index-cn");
    const string index_en = getPath("index-en");
};

#endif
